<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>04.对象</title>
    <!-- 
      java 创建对象 
        1. 类  对象的模板
        2. new 类()
      es6 创建对象的方式 和java 很像
      js 创建对象
        1. 字面量
        2. new Object()
        3. 实例化函数
     -->
</head>

<body>

    <script>
        /*
         数组和对象的区别： 
            数组的key 是索引 自动生成的
            对象的key 是自定义大的属性
        */
        /*
         对象创建： 
            方式一： 字面量 优点  简单 弊端  一次只能创建一个
        */
        var stu = {
            id: 1001,
            name: "小明",
            address: "南京市",
            say: function () {
                console.log(this.name + "在说话....");
            }
        }
        // 设置或者对象的属性和方法
        /*
         方式一: 对象.属性名  不解析变量
         方式二：对象['属性名'] 可以解析变量
        */
        // 获取 第一种
        console.log(stu.id, stu.name);
        stu.say()
        // 获取 第二种
        console.log(stu["id"], stu["name"]);

        var key = "name";
        console.log(stu.key);
        console.log(stu[key]);
        // 设置对象的属性
        stu.id = 1002
        // 新增属性
        stu.xxx = "xxxx"
        stu.myfun = function () {
            console.log("我是一个函数....");
        }
        console.dir(stu);
        for (var key in stu) {
            if (stu[key] instanceof Function) {
                stu[key]()
            } else {
                console.log(key, stu[key]);
            }
        }
        console.log("================");
        var arr = [1, 2, 3, 4, 5]
        console.dir(arr);
        for (var index in arr) {
            console.log(index, arr[index]);
        }

        // function函数本质是一种类型 类型就是 Function
        function fun() {

        }

        console.log(fun instanceof Function); // true
        console.dir(fun);
        console.dir(Object.prototype.toString.call(fun));
    </script>

</body>

</html>